home *** CD-ROM | disk | FTP | other *** search
/ PCMania 34 / PCMania CD34.iso / pictpub / install / setupapi.inc < prev    next >
Encoding:
Text File  |  1994-12-07  |  40.2 KB  |  1,282 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27.  
  28. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  29. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  32. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  33. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  34. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  35. DECLARE FUNCTION SetWindowPos LIB "user" (hWnd%, hWndAfter%, x%, y%, cx%, cy%, fuFlags%) AS INTEGER
  36.  
  37.  
  38.  
  39. '**************************************************************************
  40. '****************************** Setup Constants ***************************
  41. '**************************************************************************
  42.  
  43.  
  44. ''Command Option Flags
  45.  
  46. CONST cmoVital       = 1
  47. CONST cmoCopy        = 2
  48. CONST cmoUndo        = 4
  49. CONST cmoRoot        = 8
  50. CONST cmoDecompress  = 16
  51. CONST cmoTimeStamp   = 32
  52. CONST cmoReadOnly    = 64
  53. CONST cmoBackup      = 128
  54. CONST cmoForce       = 256
  55. CONST cmoRemove      = 512
  56. CONST cmoOverwrite   = 1024
  57. CONST cmoAppend      = 2048
  58. CONST cmoPrepend     = 4096
  59. CONST cmoNone        = 0
  60. CONST cmoAll         = 65535
  61.  
  62.  
  63. ''File Exist Modes
  64.  
  65. CONST femExists     = 0
  66. CONST femRead       = 1
  67. CONST femWrite      = 2
  68. CONST femReadWrite  = 3
  69.  
  70.  
  71. ''Read-Only Return Code
  72.  
  73. CONST ynrcNo         = 0
  74. CONST ynrcYes        = 1
  75. CONST ynrcErr1       = 2
  76. CONST ynrcErr2       = 3
  77. CONST ynrcErr3       = 4
  78. CONST ynrcErr4       = 5
  79. CONST ynrcErr5       = 6
  80. CONST ynrcErr6       = 7
  81. CONST ynrcErr7       = 8
  82. CONST ynrcErr8       = 9
  83. CONST ynrcErr9       = 10
  84.  
  85.  
  86. ''General Return Codes
  87.  
  88. CONST grcOkay       = 0
  89. CONST grcNotOkay    = 1
  90. CONST grcUserQuit   = 48
  91.  
  92.  
  93. ''Ranges
  94.  
  95. ''CONST cbSymValMax = 8192
  96. CONST cbSymValMax = 512
  97.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  98.     '' but we get Out of String Space wattdrvr error if we alloc
  99.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  100.     '' We should look into using dynamic far alloc instead of
  101.     '' STRING$ for large buffers.
  102.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  103.  
  104.  
  105. ''ON ERROR Error Codes
  106. CONST STFERR      = 1024   ''setup system error
  107. CONST STFQUIT     = 1025   ''user quit
  108.  
  109. CONST scmOff      = 0
  110. CONST scmOnIgnore = 1
  111. CONST scmOnFatal  = 2
  112.  
  113.  
  114. '**************************************************************************
  115. '********************************  Setup API's  ***************************
  116. '**************************************************************************
  117.  
  118. '' common
  119.  
  120. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  121. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  122. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  124. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  125. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  126. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  127. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  128. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  129. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  130. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  131.  
  132.  
  133. ''shell
  134.  
  135. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  136. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  137. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  138. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  139. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  140. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  141. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  142. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  143. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  144. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  145. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  147. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  148.  
  149.  
  150. ''shell
  151.  
  152. DECLARE SUB MaximizeFrame
  153. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  154. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  155. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  156.  
  157.  
  158.  
  159. ''install
  160. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  161. DECLARE SUB CloseLogFile
  162. DECLARE SUB WriteToLogFile (szStr$)
  163. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  164. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  165. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  166. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  167. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  168. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  169. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  170. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  174. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  175. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  176. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  177. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  178. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  179. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  180. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  181. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  182. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  183. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  184. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  185. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  186. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  187. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  188. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  189. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  190. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  191. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  192. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  193. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  194. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  195. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  196. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  197. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  198. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  199. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  200.  
  201. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  202.  
  203.  
  204.  
  205. '*************************************************************************
  206. '****************  Setup Basic Wrapper Declarations  *********************
  207. '*************************************************************************
  208.  
  209.  
  210. ''shell
  211.  
  212. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  213. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  214. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  215. DECLARE SUB UIPop (n%)
  216. DECLARE SUB UIPopAll
  217. DECLARE SUB SetTitle (sz$)
  218. DECLARE SUB ReadInfFile (szFile$)
  219. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  220. DECLARE SUB RemoveSymbol (szSym$)
  221. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  222. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  223. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  224. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  225. DECLARE SUB AddListItem(szSymbol$, szItem$)
  226. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  227.  
  228. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  229. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  230.  
  231. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  232. DECLARE SUB RestoreCursor (hPrev%)
  233.  
  234. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  235. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  236.  
  237. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  238. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  239. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  240. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  241.  
  242. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  243. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  244. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  245. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  246.  
  247.  
  248. ''install
  249.  
  250.  
  251. DECLARE SUB CreateDir (szDir$, cmo%)
  252. DECLARE SUB RemoveDir (szDir$, cmo%)
  253. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  254. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  255. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  256. DECLARE SUB CopyFilesInCopyList
  257. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  258. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  259. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  260. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  261. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  262. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  263. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  264. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  265. DECLARE SUB DumpCopyList (szFile$)
  266. DECLARE SUB ClearCopyList
  267. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  268. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  269. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  270. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  271. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  272. DECLARE SUB InitInstall
  273. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  274. DECLARE SUB ClearBillboardList
  275. DECLARE SUB SetCopyGaugePosition (x%, y%)
  276. DECLARE SUB SetRestartDir(szDir$)
  277. DECLARE FUNCTION RestartListEmpty AS INTEGER
  278. DECLARE FUNCTION ExitExecRestart AS INTEGER
  279. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  280. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  281. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  282.  
  283. '' Error Handling
  284.  
  285. '$ifdef DEBUG
  286.  
  287. '' Setup API Errors
  288. CONST saeFail   = 0
  289. CONST saeInit   = 1
  290. CONST saeNYI    = 3
  291. CONST saeArg    = 4    ''must be max sae value
  292.  
  293. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  294. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  295.  
  296. '' chk arg
  297. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  298. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  299. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  300. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  301.  
  302. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  303. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  304.  
  305. '$endif ''DEBUG
  306.  
  307.  
  308.  
  309. '' Windows system detect
  310.  
  311. DECLARE FUNCTION GetWindowsDir  AS STRING
  312. DECLARE FUNCTION GetWindowsSysDir AS STRING
  313. DECLARE FUNCTION IsWindowsShared AS INTEGER
  314.  
  315.  
  316. '*************************************************************************
  317. '*****************  Setup Basic Wrapper Definitions  *********************
  318. '*************************************************************************
  319. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  320.     fFrameInit = 0
  321.     fInstallInit = 0
  322.  
  323.     IF hSetup > 0 THEN
  324. '$ifdef DEBUG
  325.         StfApiErr saeInit, "InitSetup", szCmdLine$
  326. '$endif ''DEBUG
  327.     END IF
  328.  
  329.     i% = InitFrame(szCmdLine$)
  330.     fFrameInit = 1
  331.  
  332.     InitInstall
  333.     fInstallInit = 1
  334.  
  335.     InitSetup = i%
  336. END FUNCTION
  337.  
  338. '*************************************************************************
  339. SUB OpenLogFile (szFile$, fAppend%) STATIC
  340. '$ifdef DEBUG
  341.     if FValidFATPath(szFile$) = 0 then
  342.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  343.     end if
  344. '$endif ''DEBUG
  345.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  346. '$ifdef DEBUG
  347.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  348. '$endif ''DEBUG
  349.         ERROR STFERR
  350.     END IF
  351. END SUB
  352.  
  353.  
  354. '*************************************************************************
  355. SUB CloseLogFile STATIC
  356.     IF FCloseLogFile() = 0 THEN
  357. '$ifdef DEBUG
  358.         StfApiErr saeFail, "CloseLogFile", ""
  359. '$endif ''DEBUG
  360.         ERROR STFERR
  361.     END IF
  362. END SUB
  363.  
  364.  
  365. '*************************************************************************
  366. SUB WriteToLogFile (szStr$) STATIC
  367.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  368. '$ifdef DEBUG
  369.         StfApiErr saeFail, "WriteToLogFile", szStr$
  370. '$endif ''DEBUG
  371.         ERROR STFERR
  372.     END IF
  373. END SUB
  374.  
  375.  
  376. ''' -1 in either parameter will mean 'center in frame client area'
  377. '*************************************************************************
  378.  
  379. '*************************************************************************
  380. SUB UIPopAll STATIC
  381.     IF FKillNDialogs(65535) = 0 THEN
  382. '$ifdef DEBUG
  383.         StfApiErr saeFail, "UIPopAll", ""
  384. '$endif ''DEBUG
  385.         ERROR STFERR
  386.     END IF
  387. END SUB
  388.  
  389.  
  390. '**************************************************************************
  391. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  392.     IF hSetup > 0 THEN
  393. '$ifdef DEBUG
  394.         StfApiErr saeInit, "InitFrame", szCmdLine$
  395. '$endif ''DEBUG
  396.     ELSE
  397.         i% = InitializeFrame(szCmdLine$)
  398.         IF i% = -1 THEN
  399.             END   '' NOT an error - Usage (/?) or Command line copy operation
  400.         ELSEIF i% = 0 THEN
  401. '$ifdef DEBUG
  402.             StfApiErr saeFail, "InitFrame", szCmdLine$
  403. '$endif ''DEBUG
  404.             END
  405.         ELSE
  406.             InitFrame = i%
  407.         END IF
  408.     END IF
  409. END FUNCTION
  410.  
  411.  
  412. '**************************************************************************
  413. SUB SetBitmap(szDll$, Bitmap%) STATIC
  414.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  415. '$ifdef DEBUG
  416.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  417. '$endif ''DEBUG
  418.         ERROR STFERR
  419.     END IF
  420. END SUB
  421.  
  422.  
  423. '**************************************************************************
  424.  
  425. '*************************************************************************
  426. SUB SetTitle(sz$) STATIC
  427.     SetWindowText HwndFrame(), sz$
  428. END SUB
  429.  
  430.  
  431. '*************************************************************************
  432. SUB ReadInfFile (szFile$) STATIC
  433. '$ifdef DEBUG
  434.     if FValidFATPath(szFile$) = 0 then
  435.         BadArgErr 1, "ReadInfFile", szFile$
  436.     end if
  437.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  438.         StfApiErr saeFail, "ReadInfFile", szFile$
  439. '$else  ''!DEBUG
  440.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  441. '$endif ''!DEBUG
  442.         ERROR STFERR
  443.     END IF
  444. END SUB
  445.  
  446.  
  447. '*************************************************************************
  448. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  449. '$ifdef DEBUG
  450.     if szDll$ = "" then
  451.         n% = 1
  452.     elseif szDlgProc$ = "" then
  453.         n% = 3
  454.     else
  455.         n% = 0
  456.     end if
  457.     if n% > 0 then
  458.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  459.     end if
  460. '$endif ''DEBUG
  461.  
  462.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  463. '$ifdef DEBUG
  464.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  465. '$endif ''DEBUG
  466.         ERROR STFERR
  467.     ELSE
  468.         UIStartDlg = GetSymbolValue("DLGEVENT")
  469.     END IF
  470. END FUNCTION
  471.  
  472.  
  473. '*************************************************************************
  474. SUB UIPop (n%) STATIC
  475.     IF FKillNDialogs(n%) = 0 THEN
  476. '$ifdef DEBUG
  477.         StfApiErr saeFail, "UIPop", STR$(n%)
  478. '$endif ''DEBUG
  479.         ERROR STFERR
  480.     END IF
  481. END SUB
  482.  
  483.  
  484. '*************************************************************************
  485. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  486.     SetBeepingMode = FSetBeepingMode(mode%)
  487. END FUNCTION
  488.  
  489. '*************************************************************************
  490. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  491. '$ifdef DEBUG
  492.     if szSymbol$ = "" then
  493.         BadArgErr 1, "GetSymbolValue", szSymbol$
  494.     end if
  495. '$endif ''DEBUG
  496.     szValue$ = string$(cbSymValMax,128)
  497.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  498.     GetSymbolValue = szValue$
  499.     IF Length% >= cbSymValMax THEN
  500.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  501.         ERROR STFERR
  502.     END IF
  503.     IF szSymbol$ = "" THEN
  504.         ERROR STFERR
  505.     END IF
  506.     szValue$ = ""
  507. END FUNCTION
  508.  
  509.  
  510. '*************************************************************************
  511. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  512. '$ifdef DEBUG
  513.     if szSymbol$ = "" then
  514.         BadArgErr 1, "GetListLength", szSymbol$
  515.     end if
  516. '$endif ''DEBUG
  517.     GetListLength = UsGetListLength(szSymbol$)
  518.     IF szSymbol$ = "" THEN
  519.         ERROR STFERR
  520.     END IF
  521. END FUNCTION
  522.  
  523.  
  524. '*************************************************************************
  525. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  526. '$ifdef DEBUG
  527.     if szListSymbol$ = "" then
  528.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  529.     end if
  530.  
  531.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  532.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  533.     end if
  534. '$endif ''DEBUG
  535.  
  536.     szListItem$ = string$(cbSymValMax,32)
  537.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  538.     GetListItem = szListItem$
  539.     IF Length% >= cbSymValMax THEN
  540.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  541.         ERROR STFERR
  542.     END IF
  543.     IF szListSymbol$ = "" THEN
  544.         ERROR STFERR
  545.     END IF
  546.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  547.         ERROR STFERR
  548.     end if
  549.     szListItem$ = ""
  550. END FUNCTION
  551.  
  552.  
  553. '*************************************************************************
  554. SUB AddListItem(szSymbol$, szItem$) STATIC
  555. '$ifdef DEBUG
  556.     if szSymbol$ = "" then
  557.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  558.     end if
  559. '$endif ''DEBUG
  560.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  561. '$ifdef DEBUG
  562.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  563. '$endif ''DEBUG
  564.         ERROR STFERR
  565.     END IF
  566. END SUB
  567.  
  568.  
  569. '*************************************************************************
  570. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  571. '$ifdef DEBUG
  572.     if szSymbol$ = "" then
  573.         nArg% = 1
  574.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  575.         nArg% = 2
  576.     else
  577.         nArg% = 0
  578.     end if
  579.     if nArg% > 0 then
  580.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  581.     end if
  582. '$endif ''DEBUG
  583.  
  584.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  585. '$ifdef DEBUG
  586.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  587. '$endif ''DEBUG
  588.         ERROR STFERR
  589.     END IF
  590. END SUB
  591.  
  592.  
  593. '**************************************************************************
  594. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  595. '$ifdef DEBUG
  596.     if szSymbol$ = "" then
  597.         n% = 1
  598.     elseif FValidInfSect(szSect$) = 0 then
  599.         n% = 2
  600.     else
  601.         n% = 0
  602.     end if
  603.     if n% > 0 then
  604.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  605.     end if
  606. '$endif ''DEBUG
  607.  
  608.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  609. '$ifdef DEBUG
  610.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  611. '$endif ''DEBUG
  612.         ERROR STFERR
  613.     END IF
  614. END SUB
  615.  
  616.  
  617. '*************************************************************************
  618. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  619. '$ifdef DEBUG
  620.     if szSymbol$ = "" then
  621.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  622.     end if
  623. '$endif ''DEBUG
  624.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  625. '$ifdef DEBUG
  626.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  627. '$endif ''DEBUG
  628.         ERROR STFERR
  629.     END IF
  630. END SUB
  631.  
  632.  
  633. '*************************************************************************
  634. SUB RemoveSymbol(szSym$) STATIC
  635. '$ifdef DEBUG
  636.     if szSym$ = "" then
  637.         BadArgErr 1, "RemoveSymbol", szSym$
  638.     end if
  639. '$endif ''DEBUG
  640.     IF FRemoveSymbol(szSym$) = 0 THEN
  641. '$ifdef DEBUG
  642.         StfApiErr saeFail, "RemoveSymbol", szSym$
  643. '$endif ''DEBUG
  644.         ERROR STFERR
  645.     END IF
  646. END SUB
  647.  
  648.  
  649. '*************************************************************************
  650. FUNCTION ShowWaitCursor STATIC AS INTEGER
  651.     ShowWaitCursor = HShowWaitCursor
  652. END FUNCTION
  653.  
  654.  
  655. '*************************************************************************
  656. SUB RestoreCursor (hPrev%) STATIC
  657.     i% = FRestoreCursor(hPrev%)
  658.     IF i% = 0 THEN
  659. '$ifdef DEBUG
  660.         StfApiErr saeFail, "RestoreCursor", ""
  661. '$endif ''DEBUG
  662.         ERROR STFERR
  663.     END IF
  664. END SUB
  665.  
  666. '*************************************************************************
  667. SUB InitInstall STATIC
  668.     IF hSetup > 0 THEN
  669. '$ifdef DEBUG
  670.         StfApiErr saeInit, "InitInstall", ""
  671. '$endif ''DEBUG
  672.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  673. '$ifdef DEBUG
  674.         StfApiErr saeFail, "InitInstall", ""
  675. '$endif ''DEBUG
  676.         END
  677.     END IF
  678. END SUB
  679.  
  680.  
  681. '*************************************************************************
  682. SUB CreateDir (szDir$, cmo%) STATIC
  683. '$ifdef DEBUG
  684.     if FValidFATDir(szDir$) = 0 then
  685.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  686.     end if
  687. '$endif ''DEBUG
  688.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  689. '$ifdef DEBUG
  690.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  691. '$endif ''DEBUG
  692.         ERROR STFERR
  693.     END IF
  694. END SUB
  695.  
  696.  
  697. '*************************************************************************
  698.  
  699. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  700. '$ifdef DEBUG
  701.     if FValidIniFile(szFile$) = 0 then
  702.         n% = 1
  703.     elseif FValidInfSect(szSect$) = 0 then
  704.         n% = 2
  705.     else
  706.         n% = 0
  707.     end if
  708.     if n% > 0 then
  709.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  710.     end if
  711. '$endif ''DEBUG
  712.  
  713.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  714. '$ifdef DEBUG
  715.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  716. '$endif ''DEBUG
  717.         ERROR STFERR
  718.     END IF
  719. END SUB
  720.  
  721.  
  722. '*************************************************************************
  723. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  724. '$ifdef DEBUG
  725.     if FValidIniFile(szFile$) = 0 then
  726.         n% = 1
  727.     elseif FValidInfSect(szSect$) = 0 then
  728.         n% = 2
  729.     else
  730.         n% = 0
  731.     end if
  732.     if n% > 0 then
  733.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  734.     end if
  735. '$endif ''DEBUG
  736.  
  737.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  738. '$ifdef DEBUG
  739.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  740. '$endif ''DEBUG
  741.         ERROR STFERR
  742.     END IF
  743. END SUB
  744.  
  745.  
  746. '*************************************************************************
  747. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  748. '$ifdef DEBUG
  749.     if FValidIniFile(szFile$) = 0 then
  750.         n% = 1
  751.     elseif FValidInfSect(szSect$) = 0 then
  752.         n% = 2
  753.     elseif szKey$ = "" then
  754.         n% = 3
  755.     else
  756.         n% = 0
  757.     end if
  758.     if n% > 0 then
  759.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  760.     end if
  761. '$endif ''DEBUG
  762.  
  763.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  764. '$ifdef DEBUG
  765.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  766. '$endif ''DEBUG
  767.         ERROR STFERR
  768.     END IF
  769. END SUB
  770.  
  771.  
  772. '*************************************************************************
  773. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  774. '$ifdef DEBUG
  775.     if szGroup$ = "" or len(szGroup$) > 24 then
  776.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  777.     end if
  778. '$endif ''DEBUG
  779.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  780. '$ifdef DEBUG
  781.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  782. '$endif ''DEBUG
  783.         ERROR STFERR
  784.     END IF
  785. END SUB
  786.  
  787.  
  788. '*************************************************************************
  789. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  790. '$ifdef DEBUG
  791.     if szGroup$ = "" or len(szGroup$) > 24 then
  792.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  793.     end if
  794. '$endif ''DEBUG
  795.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  796. '$ifdef DEBUG
  797.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  798. '$endif ''DEBUG
  799.         ERROR STFERR
  800.     END IF
  801. END SUB
  802.  
  803.  
  804.  
  805. '*************************************************************************
  806. SUB DumpCopyList (szFile$) STATIC
  807. '$ifdef DEBUG
  808.     if szFile$ = "" then
  809.         BadArgErr 1, "DumpCopyList", szFile$
  810.     end if
  811. '$endif ''DEBUG
  812.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  813. '$ifdef DEBUG
  814.         StfApiErr saeFail, "DumpCopyList", szFile$
  815. '$endif ''DEBUG
  816.         ERROR STFERR
  817.     END IF
  818. END SUB
  819.  
  820.  
  821. '*************************************************************************
  822. SUB ClearCopyList STATIC
  823.     ResetCopyList
  824. END SUB
  825.  
  826.  
  827. '*************************************************************************
  828. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  829.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  830.     IF lNeed& < 0 THEN
  831. '$ifdef DEBUG
  832.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  833. '$endif ''DEBUG
  834.         ERROR STFERR
  835.     END IF
  836.     GetCopyListCost = lNeed&
  837. END FUNCTION
  838.  
  839.  
  840. '*************************************************************************
  841. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  842.     szItemNew$ = szItem$
  843.     IF szOther$ <> "" THEN
  844.         szItemNew$ = szItem$ + "," + szOther$
  845.     END IF
  846. '$ifdef DEBUG
  847.     if szGroup$ = "" or len(szGroup$) > 24 then
  848.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  849.     end if
  850. '$endif ''DEBUG
  851.  
  852.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  853. '$ifdef DEBUG
  854.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  855. '$endif ''DEBUG
  856.         ERROR STFERR
  857.     END IF
  858.     szItemNew$ = ""
  859. END SUB
  860.  
  861.  
  862. '*************************************************************************
  863.  
  864. '*************************************************************************
  865. SUB CopyFilesInCopyList STATIC
  866.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  867.  
  868.     IF grc% = grcUserQuit THEN
  869.         ERROR STFQUIT
  870.     ELSEIF grc% > 0 THEN
  871. '$ifdef DEBUG
  872.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  873. '$endif ''DEBUG
  874.         ERROR STFERR
  875.     END IF
  876. END SUB
  877.  
  878.  
  879. '*************************************************************************
  880. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  881. '$ifdef DEBUG
  882.     if FValidFATPath(szFullPathSrc$) = 0 then
  883.         n% = 1
  884.     elseif FValidFATPath(szFullPathDst$) = 0 then
  885.         n% = 2
  886.     else
  887.         n% = 0
  888.     end if
  889.     if n% > 0 then
  890.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  891.     end if
  892. '$endif ''DEBUG
  893.  
  894.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  895. '$ifdef DEBUG
  896.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  897. '$endif ''DEBUG
  898.         ERROR STFERR
  899.     END IF
  900. END SUB
  901.  
  902.  
  903.  
  904. '*************************************************************************
  905. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  906. '$ifdef DEBUG
  907.     if FValidFATPath(szFullPathSrc$) = 0 then
  908.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  909.     end if
  910. '$endif ''DEBUG
  911.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  912. '$ifdef DEBUG
  913.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  914. '$endif ''DEBUG
  915.         ERROR STFERR
  916.     END IF
  917. END SUB
  918.  
  919.  
  920. '*************************************************************************
  921. SUB BackupFile (szFullPath$, szBackup$) STATIC
  922. '$ifdef DEBUG
  923.     if FValidFATPath(szFullPath$) = 0 then
  924.         n% = 1
  925.     elseif szBackup$ = "" then
  926.         n% = 2
  927.     else
  928.         n% = 0
  929.     end if
  930.     if n% > 0 then
  931.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  932.     end if
  933. '$endif ''DEBUG
  934.  
  935.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  936. '$ifdef DEBUG
  937.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  938. '$endif ''DEBUG
  939.         ERROR STFERR
  940.     END IF
  941. END SUB
  942.  
  943.  
  944. '*************************************************************************
  945. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  946. '$ifdef DEBUG
  947.     if FValidInfSect(szSect$) = 0 then
  948.         n% = 1
  949.     elseif FValidFATDir(szSrc$) = 0 then
  950.         n% = 2
  951.     elseif FValidFATDir(szDest$) = 0 then
  952.         n% = 3
  953.     else
  954.         n% = 0
  955.     end if
  956.     if n% > 0 then
  957.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  958.     end if
  959. '$endif ''DEBUG
  960.  
  961.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  962. '$ifdef DEBUG
  963.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  964. '$endif ''DEBUG
  965.         ERROR STFERR
  966.     END IF
  967. END SUB
  968.  
  969.  
  970. '*************************************************************************
  971. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  972. '$ifdef DEBUG
  973.     if FValidInfSect(szSect$) = 0 then
  974.         n% = 1
  975.     elseif szKey$ = "" then
  976.         n% = 2
  977.     elseif FValidFATDir(szSrc$) = 0 then
  978.         n% = 3
  979.     elseif FValidFATDir(szDest$) = 0 then
  980.         n% = 4
  981.     else
  982.         n% = 0
  983.     end if
  984.     if n% > 0 then
  985.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  986.     end if
  987. '$endif ''DEBUG
  988.  
  989.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  990. '$ifdef DEBUG
  991.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  992. '$endif ''DEBUG
  993.         ERROR STFERR
  994.     END IF
  995. END SUB
  996.  
  997.  
  998. '*************************************************************************
  999. '*************************************************************************
  1000. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  1001. '$ifdef DEBUG
  1002.     if FValidInfSect(szSect$) = 0 then
  1003.         n% = 1
  1004.     elseif szKey$ = "" then
  1005.         n% = 2
  1006.     else
  1007.         n% = 0
  1008.     end if
  1009.     if n% > 0 then
  1010.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  1011.     end if
  1012. '$endif ''DEBUG
  1013.  
  1014.     szBuf$ = string$(128, 32)
  1015.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  1016.     IF Length% >= 128 THEN
  1017.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1018.         ERROR STFERR
  1019.     END IF
  1020.  
  1021.     IF Length% = -1 THEN
  1022. '$ifdef DEBUG
  1023.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  1024. '$endif ''DEBUG
  1025.         ERROR STFERR
  1026.     END IF
  1027.  
  1028.     GetSectionKeyVersion = szBuf$
  1029.     szBuf$ = ""
  1030. END FUNCTION
  1031.  
  1032. '*************************************************************************
  1033. SUB SetCopyGaugePosition (x%, y%) STATIC
  1034.     ProSetPos x%, y%
  1035. END SUB
  1036.  
  1037.  
  1038. '*************************************************************************
  1039. SUB MaximizeFrame STATIC
  1040.     cx% = GetSystemMetrics (SM_CXSCREEN)
  1041.     cy% = GetSystemMetrics (SM_CYSCREEN)
  1042.     hWnd% = HwndFrame
  1043.     bResult% = SetWindowPos (hWnd%,0,0,0,cx%,cy%,20)
  1044. '    if cx% > 640 THEN
  1045. '        StfApiErr saeFail, "SetWindowPos", "> 640!"
  1046. '    END IF
  1047. END SUB
  1048.  
  1049.  
  1050. '*************************************************************************
  1051. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1052.     IsDirWritable = FIsDirWritable(szDir$)
  1053. END FUNCTION
  1054.  
  1055.  
  1056. '*************************************************************************
  1057. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1058. '$ifdef DEBUG
  1059.     if FValidFATDir(szFile$) = 0 then
  1060.         BadArgErr 1, "IsFileWritable", szFile$
  1061.     end if
  1062. '$endif ''DEBUG
  1063.     IsFileWritable = FIsFileWritable(szFile$)
  1064. END FUNCTION
  1065.  
  1066.  
  1067. '*************************************************************************
  1068. FUNCTION GetWindowsDir STATIC AS STRING
  1069.     szBuf$ = string$(256, 32)
  1070.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1071.  
  1072.     IF cbBuf% = 0 THEN
  1073.         GetWindowsDir = ""
  1074. '$ifdef DEBUG
  1075.         StfApiErr saeFail, "GetWindowsDir", ""
  1076. '$endif ''DEBUG
  1077.         ERROR STFERR
  1078.     ELSE
  1079.         IF cbBuf% > 255 THEN
  1080.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1081.             ERROR STFERR
  1082.         END IF
  1083.         szBuf$ = RTRIM$(szBuf$)
  1084.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1085.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1086.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1087.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1088.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1089.         END IF
  1090.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1091.             szBuf$ = szBuf$ + "\"
  1092.         END IF
  1093.         GetWindowsDir = szBuf$
  1094.     END IF
  1095.  
  1096.     szBuf$ = ""
  1097. END FUNCTION
  1098.  
  1099.  
  1100. '*************************************************************************
  1101. FUNCTION GetWindowsSysDir STATIC AS STRING
  1102.     szBuf$ = string$(256, 32)
  1103.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1104.  
  1105.     IF cbBuf% = 0 THEN
  1106. '$ifdef DEBUG
  1107.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1108. '$endif ''DEBUG
  1109.         ERROR STFERR
  1110.     ELSE
  1111.         IF cbBuf% > 255 THEN
  1112.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1113.             ERROR STFERR
  1114.         END IF
  1115.         szBuf$ = RTRIM$(szBuf$)
  1116.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1117.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1118.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1119.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1120.         END IF
  1121.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1122.             szBuf$ = szBuf$ + "\"
  1123.         END IF
  1124.         GetWindowsSysDir = szBuf$
  1125.     END IF
  1126.  
  1127.     szBuf$ = ""
  1128. END FUNCTION
  1129.  
  1130.  
  1131. '*************************************************************************
  1132. FUNCTION IsWindowsShared STATIC AS INTEGER
  1133.     szWin$ = UCASE$(GetWindowsDir())
  1134.     szSys$ = UCASE$(GetWindowsSysDir())
  1135.  
  1136.     IF len(szWin$) = 0 THEN
  1137. '$ifdef DEBUG
  1138.         StfApiErr saeFail, "IsWindowsShared", ""
  1139. '$endif ''DEBUG
  1140.         ERROR STFERR
  1141.     END IF
  1142.  
  1143.     IF len(szSys$) <= len(szWin$) THEN
  1144.         IsWindowsShared = 1
  1145.     ELSE
  1146.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1147.         IF szWin$ = szSys$ THEN
  1148.             IsWindowsShared = 0
  1149.         ELSE
  1150.             IsWindowsShared = 1
  1151.         END IF
  1152.     END IF
  1153. END FUNCTION
  1154.  
  1155.  
  1156. '*************************************************************************
  1157. '*************************************************************************
  1158. SUB SetRestartDir (szDir$) STATIC
  1159. '$ifdef DEBUG
  1160.     if FValidFATDir(szDir$) = 0 then
  1161.         BadArgErr 1, "SetRestartDir", szDir$
  1162.     end if
  1163. '$endif ''DEBUG
  1164.     IF FSetRestartDir(szDir$) = 0 THEN
  1165. '$ifdef DEBUG
  1166.         StfApiErr saeFail, "SetRestartDir", szDir$
  1167. '$endif ''DEBUG
  1168.         ERROR STFERR
  1169.     END IF
  1170. END SUB
  1171.  
  1172.  
  1173. '*************************************************************************
  1174. FUNCTION RestartListEmpty STATIC AS INTEGER
  1175.     IF FRestartListEmpty() = 0 THEN
  1176.         RestartListEmpty = 0
  1177.     ELSE
  1178.         RestartListEmpty = 1
  1179.     END IF
  1180. END FUNCTION
  1181.  
  1182.  
  1183. '*************************************************************************
  1184. FUNCTION ExitExecRestart STATIC AS INTEGER
  1185.     ExitExecRestart = FExitExecRestart
  1186. END FUNCTION
  1187.  
  1188.  
  1189. '*************************************************************************
  1190.  
  1191.  
  1192. '**************************************************************************
  1193. '***************************  Error Handlers  *****************************
  1194. '**************************************************************************
  1195.  
  1196.  
  1197. '$ifdef DEBUG
  1198. '**************************************************************************
  1199. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1200.     select case nMsg%
  1201.         case saeFail
  1202.             lpText$ = "Failed"
  1203.         case saeInit
  1204.             lpText$ = "Already Initialized"
  1205.         case saeNYI
  1206.             lpText$ = "NYI"
  1207.         case else
  1208.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1209.     end select
  1210.  
  1211.     lpText$ = lpText$ + ": "+ szApi$
  1212.     if szArgs$ <> "" then
  1213.         lpText$ = lpText + " (" + szArgs$ + ")"
  1214.     end if
  1215.     lpCaption$ = "MS-Setup Toolkit API Error"
  1216.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1217.     print lpText$
  1218.     lpText$ = ""
  1219.     lpCaption$ = ""
  1220. END SUB
  1221.  
  1222. '**************************************************************************
  1223. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1224.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1225.     ERROR STFERR
  1226. END SUB
  1227.  
  1228.  
  1229. '**************************************************************************
  1230. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1231.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1232.         FValidInfSect = 0
  1233.     else
  1234.         FValidInfSect = 1
  1235.     end if
  1236. END FUNCTION
  1237.  
  1238.  
  1239. '** REVIEW: Move this function into common lib (we'll need it there too)
  1240. '**************************************************************************
  1241. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1242.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1243.         FValidIniFile = 0
  1244.     else
  1245.         FValidIniFile = 1
  1246.     end if
  1247. END FUNCTION
  1248.  
  1249. '**************************************************************************
  1250. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1251.  
  1252.     if szDrive$ = "" then
  1253.         FValidDrive = 0
  1254.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1255.         FValidDrive = 1
  1256.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1257.         FValidDrive = 0
  1258.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1259.         FValidDrive = 0
  1260.     elseif LEN(szDrive$) = 1 then
  1261.         FValidDrive = 1
  1262.     elseif INSTR(2,szDrive$,":\") = 2 then
  1263.         FValidDrive = 1
  1264.     elseif INSTR(1,szDrive$,":") = 2 then
  1265.         FValidDrive = 1
  1266.     else
  1267.         FValidDrive = 0
  1268.     end if
  1269. END FUNCTION
  1270.  
  1271. '$endif ''DEBUG
  1272.  
  1273.  
  1274. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1275.  
  1276. End Trap
  1277.  
  1278. hSetup = InitSetup(COMMAND$)
  1279.  
  1280. ON ERROR GOTO QUIT
  1281.  
  1282.